package io.github.echarts.option.series;

import io.github.echarts.option.style.AreaStyle;
import io.github.echarts.option.style.ItemStyle;
import io.github.echarts.option.style.LineStyle;

/**
 * 折线图系列配置。
 */
public class LineSeries extends SeriesOption {
    
    private static final long serialVersionUID = 1L;
    private static final String TYPE = "line";
    
    private Boolean smooth;
    private String stack;
    private LineStyle lineStyle;
    private ItemStyle itemStyle;
    private Boolean showSymbol;
    private String symbol;
    private Integer symbolSize;
    private AreaStyle areaStyle;
    
    /**
     * 构造一个新的折线图系列配置实例。
     */
    public LineSeries() {
        setType(TYPE);
    }
    
    /**
     * 是否是平滑曲线。
     *
     * @return 如果是平滑曲线则为true，否则为false
     */
    public Boolean getSmooth() {
        return smooth;
    }
    
    /**
     * 设置是否是平滑曲线。
     *
     * @param smooth 如果要使用平滑曲线则为true，否则为false
     * @return 当前配置实例，用于链式调用
     */
    public LineSeries setSmooth(Boolean smooth) {
        this.smooth = smooth;
        return this;
    }
    
    /**
     * 获取数据堆叠的分组ID。
     *
     * @return 数据堆叠的分组ID
     */
    public String getStack() {
        return stack;
    }
    
    /**
     * 设置数据堆叠的分组ID。
     *
     * @param stack 数据堆叠的分组ID
     * @return 当前配置实例，用于链式调用
     */
    public LineSeries setStack(String stack) {
        this.stack = stack;
        return this;
    }
    
    /**
     * 获取线条样式。
     *
     * @return 线条样式
     */
    public LineStyle getLineStyle() {
        return lineStyle;
    }
    
    /**
     * 设置线条样式。
     *
     * @param lineStyle 线条样式
     * @return 当前配置实例，用于链式调用
     */
    public LineSeries setLineStyle(LineStyle lineStyle) {
        this.lineStyle = lineStyle;
        return this;
    }
    
    /**
     * 获取折线图标记点的样式。
     *
     * @return 标记点样式
     */
    public ItemStyle getItemStyle() {
        return itemStyle;
    }
    
    /**
     * 设置折线图标记点的样式。
     *
     * @param itemStyle 标记点样式
     * @return 当前配置实例，用于链式调用
     */
    public LineSeries setItemStyle(ItemStyle itemStyle) {
        this.itemStyle = itemStyle;
        return this;
    }
    
    /**
     * 是否显示标记点。
     *
     * @return 如果显示标记点则为true，否则为false
     */
    public Boolean getShowSymbol() {
        return showSymbol;
    }
    
    /**
     * 设置是否显示标记点。
     *
     * @param showSymbol 如果要显示标记点则为true，否则为false
     * @return 当前配置实例，用于链式调用
     */
    public LineSeries setShowSymbol(Boolean showSymbol) {
        this.showSymbol = showSymbol;
        return this;
    }
    
    /**
     * 获取标记点图形类型。
     * 可选值：'circle', 'rect', 'roundRect', 'triangle', 'diamond', 'pin', 'arrow', 'none'
     *
     * @return 标记点图形类型
     */
    public String getSymbol() {
        return symbol;
    }
    
    /**
     * 设置标记点图形类型。
     *
     * @param symbol 标记点图形类型
     * @return 当前配置实例，用于链式调用
     */
    public LineSeries setSymbol(String symbol) {
        this.symbol = symbol;
        return this;
    }
    
    /**
     * 获取标记点大小。
     *
     * @return 标记点大小
     */
    public Integer getSymbolSize() {
        return symbolSize;
    }
    
    /**
     * 设置标记点大小。
     *
     * @param symbolSize 标记点大小
     * @return 当前配置实例，用于链式调用
     */
    public LineSeries setSymbolSize(Integer symbolSize) {
        this.symbolSize = symbolSize;
        return this;
    }
    
    /**
     * 获取区域填充样式。
     *
     * @return 区域填充样式
     */
    public AreaStyle getAreaStyle() {
        return areaStyle;
    }
    
    /**
     * 设置区域填充样式。
     *
     * @param areaStyle 区域填充样式
     * @return 当前配置实例，用于链式调用
     */
    public LineSeries setAreaStyle(AreaStyle areaStyle) {
        this.areaStyle = areaStyle;
        return this;
    }
    
    /**
     * 启用区域填充样式，使用默认配置。
     *
     * @return 当前配置实例，用于链式调用
     */
    public LineSeries enableAreaStyle() {
        this.areaStyle = new AreaStyle();
        return this;
    }
    
    /**
     * 覆盖父类的方法，确保返回具体的LineSeries类型。
     *
     * @param data 系列数据
     * @return 当前配置实例，用于链式调用
     */
    @Override
    public Object getData() {
        return super.getData();
    }
    
    @Override
    public LineSeries setData(Object data) {
        super.setData(data);
        return this;
    }

    /**
     * 覆盖父类的方法，确保返回具体的LineSeries类型。
     *
     * @param name 系列名称
     * @return 当前配置实例，用于链式调用
     */
    @Override
    public LineSeries setName(String name) {
        super.setName(name);
        return this;
    }
} 